package zengqiang.day04

/**
 * 延迟加载是用到时再定义，不同于懒加载的用到时再加载
 * 1. by lazy 知道具体值，用到时候再加载
 * 2. lateinit 不知道具体值，后面再赋值
 * 3. by lazy 变量必须通过val修饰，lateinit需要通过var修饰
 * 4. 延迟加载不支持基本数据类型
 */
fun main(args: Array<String>) {
    var p1=Person1()
    println(p1.name)//报错 lateinit property name has not been initialized
    //这样好处是，避免了不知道怎么赋值情况下，比如说给了一个空字符串的赋值导致
    //真正使用时候没有初始化。错误暴露不出来，使用延迟加载，没初始化是会报错的
}
class Person1{
    //后面可能用到的时候才会赋值，不知道具体是什么值
    lateinit var name:String
    //lateinit修饰符不能使用自定义的set  get方法，例如set(value){}，所以才使用
    //如下的普通方法形式赋值
    fun setName1(name: String) {
        this.name=name
    }
}